package com.wx.processor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

	private static final String BEAN_NAME = "people";

	/**
	 * 执行时间点: 所有的 Bean 定义信息 [已经加载到容器中]，但是 Bean 实例还没有被初始化，可以修改容器中的 BeanDefinition
	 */
	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

		System.out.println("MyBeanFactoryPostProcessor 正在执行！！！");

		for (String beanName : beanFactory.getBeanDefinitionNames()) {
			if (BEAN_NAME.equals(beanName)) {
				// 获取 BEAN_NAME 的 BeanDefinition
				BeanDefinition peopleBeanDefinition = beanFactory.getBeanDefinition(beanName);
				// 将 BEAN_NAME 的 BeanDefinition 设置成懒加载
				peopleBeanDefinition.setLazyInit(true);
			}
		}
	}
}
